/*
 * To change this template, choose Tools | Templates
 * and open the template in the editor.
 */
package br.jm.financeiro.view;

import br.jm.financeiro.base.eao.EaoException;
import br.jm.financeiro.datamodel.LazyCliente;
import br.jm.financeiro.entity.Categoria;
import br.jm.financeiro.entity.CentroCusto;
import br.jm.financeiro.entity.CepBairro;
import br.jm.financeiro.entity.CepCidade;
import br.jm.financeiro.entity.CepEndereco;
import br.jm.financeiro.entity.CepUf;
import br.jm.financeiro.entity.Cliente;
import br.jm.financeiro.entity.Empreendimento;
import br.jm.financeiro.entity.ClienteEndereco;
import br.jm.financeiro.entity.ClienteEnderecoTelefone;
import br.jm.financeiro.entity.ClienteTelefoneContato;
import br.jm.financeiro.entity.CodigoDdd;
import br.jm.financeiro.entity.CodigoDdi;
import br.jm.financeiro.entity.Departamento;
import br.jm.financeiro.entity.EmpreendimentoEndereco;
import br.jm.financeiro.entity.EmpreendimentoLote;
import br.jm.financeiro.entity.Processo;
import br.jm.financeiro.entity.Proposta;
import br.jm.financeiro.entity.PropostaValor;
import br.jm.financeiro.filter.Funcoes;
import br.jm.financeiro.sistema.eao.ClienteEao;
import br.jm.financeiro.sistema.eao.ClienteTelefoneContatoEao;
import br.jm.financeiro.sistema.eao.CodigoDddEao;
import br.jm.financeiro.sistema.eao.CodigoDdiEao;
import br.jm.financeiro.sistema.eao.EmpreendimentoLoteEao;
import br.jm.financeiro.sistema.eao.PropostaEao;
import java.io.Serializable;
import java.util.ArrayList;
import java.util.List;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.faces.application.FacesMessage;
import javax.faces.component.UIComponent;
import javax.faces.context.FacesContext;
import javax.faces.event.ActionEvent;
import javax.faces.model.SelectItem;
import javax.faces.validator.ValidatorException;
import org.primefaces.context.RequestContext;
import org.primefaces.event.ToggleEvent;
import org.primefaces.model.LazyDataModel;

/**
 *
 * @author joao
 */
public class ClienteBean implements Serializable {

    private static final long serialVersionUID = 7695093652569269615L;

    private Cliente selectedCliente;
    private Empreendimento selectedEmpreendimento;
    private ClienteEao ClienteJpa;
    private LazyDataModel<Cliente> lazyModel;
    private ClienteEndereco selectedClienteEndereco;
    private LazyDataModel<ClienteEndereco> lazyModelEndereco;
    private String mascaraCpf;
    private SelectItem[] tipClienteOptions;
    private String[][] tipCliente = {{"F", "J"}, {"Física", "Jurídica"}};
    private SelectItem[] tipEnderecoOptions;
    private String[][] tipEndereco = {{"1", "2", "3", "4", "5"}, {"Comercial", "Residencial", "Filial", "Cobrança", "Outro"}};
    private SelectItem[] tipEnderecoTelefoneOptions;
    private String[][] tipEnderecoTelefone = {{"1", "2", "3", "4"}, {"Comercial", "Residencial", "Celular", "Outro"}};
    private SelectItem[] staClienteOptions;
    private String[][] staCliente = {{"A", "P", "I"}, {"Ativo", "Prospects", "Inativo"}};
    private SelectItem[] staEmpreendimentoOptions;
    private FacesMessage msg;
    private Funcoes funcoes = new Funcoes();
    private ClienteEnderecoTelefone selectedClienteEnderecoTelefone;
    private LazyDataModel<ClienteEnderecoTelefone> lazyModelEnderecoTelefone;
    private CodigoDdi ddi;
    private CodigoDdd ddd;
    private Departamento departamento;
    private CepEndereco cepEndereco;
    private Categoria categoria;
    private Integer rowid;
    private Integer rowidtelefone;
    private Integer rowidtelefonecontato;
    private ClienteTelefoneContato selectedClienteTelefoneContato;
    private List<ClienteTelefoneContato> ClienteTelefoneContatoList;
    private Integer ativaTab = 0;
    private Integer ativaAccordion = 0;
    private String processo;
    private String processoEndereco = "";
    private String processoTelefone = "";
    private String processoContato = "";
    private CodigoDdiEao codigoDdiJpa;
    private CodigoDddEao codigoDddJpa;
    private int rowidclienteempreendimento;
    private String cTipo;
    private String cCnpf;
    private EmpreendimentoEndereco selectedEmpreendimentoEndereco;
    private Integer rowidEndereco;
    private int nendereco;
    private CentroCusto selectedCentroCusto;
    private Cliente[] selectedClientes;
    private EmpreendimentoLoteEao empreendimentoLoteJpa;
    private boolean incluircliente;
    private boolean incluirendereco;
    private boolean incluirtelefone;
    private boolean incluircontato;
    private boolean incluirClienteEmpreendimento;
    private boolean incluirEnderecoEmpreendimento;
    private boolean ativacontato = true;
    private boolean ativatelefone = true;
    boolean lReturn = false;
    private CepEndereco cepEnderecoTemp;
    private ClienteTelefoneContatoEao clienteTelefoneContatoJpa;

    public ClienteBean() {
        try {
            CepUf cepUf = new CepUf();
            CepCidade cepCidade = new CepCidade();
            CepBairro cepBairro = new CepBairro();
            cepEnderecoTemp = new CepEndereco();
            cepCidade.setCodUf(cepUf);
            cepBairro.setCodCidade(cepCidade);
            cepEnderecoTemp.setCodBairro(cepBairro);

            this.ddd = new CodigoDdd();
            this.ddi = new CodigoDdi();

            this.ClienteJpa = ClienteEao.getInstance();
            this.codigoDdiJpa = CodigoDdiEao.getInstance();
            this.codigoDddJpa = CodigoDddEao.getInstance();
            this.empreendimentoLoteJpa = EmpreendimentoLoteEao.getInstance();
            this.clienteTelefoneContatoJpa = ClienteTelefoneContatoEao.getInstance();

            this.selectedCliente = new Cliente();
            this.selectedEmpreendimento = new Empreendimento();
            this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
            this.selectedEmpreendimentoEndereco.setIdEmpreendimento(selectedEmpreendimento);

            this.selectedClienteEndereco = new ClienteEndereco();
            this.selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
            this.selectedClienteEnderecoTelefone.setIdDdd(ddd);
            this.selectedClienteEnderecoTelefone.setIdDdi(ddi);

            this.selectedClienteTelefoneContato = new ClienteTelefoneContato();
            this.ClienteTelefoneContatoList = new ArrayList<>();

            this.selectedCentroCusto = new CentroCusto();

            this.selectedCliente.setClienteEnderecoTelefoneList(new ArrayList<ClienteEnderecoTelefone>());
            this.selectedCliente.setClienteEnderecoList(new ArrayList<ClienteEndereco>());

            this.tipClienteOptions = createFilterOptions(tipCliente);
            this.tipEnderecoOptions = createFilterOptionsEndereco(tipEndereco);
            this.tipEnderecoTelefoneOptions = createFilterOptionsEnderecoTelefone(tipEnderecoTelefone);
            this.staClienteOptions = createFilterOptionsStatus(staCliente);
            this.staEmpreendimentoOptions = createFilterOptionsStatus(staCliente);

            //CLIENTE
            this.lazyModel = new LazyCliente(ClienteJpa);

            this.incluirClienteEmpreendimento = true;

            this.selectedCliente = new Cliente();
            this.selectedClienteEndereco = new ClienteEndereco();
            this.selectedClienteEndereco.setCodLogradouro(cepEnderecoTemp);
            this.selectedEmpreendimento = new Empreendimento();
            this.selectedEmpreendimento.setIdCliente(selectedCliente);
            this.selectedEmpreendimento.setIdCusto(new CentroCusto());
            this.selectedClienteTelefoneContato = new ClienteTelefoneContato();
            this.selectedClienteTelefoneContato.setIdDepartamento(new Departamento());
            this.selectedClienteTelefoneContato.setIdTelefone(new ClienteEnderecoTelefone());
            this.selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
            this.selectedClienteEnderecoTelefone.setIdCliente(selectedCliente);
            this.selectedClienteEnderecoTelefone.setIdDdd(new CodigoDdd());
            this.selectedClienteEnderecoTelefone.setIdDdi(new CodigoDdi());
            this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
            this.selectedEmpreendimentoEndereco.setCodLogradouro(cepEnderecoTemp);

            this.selectedCliente.setIdCategoria(new Categoria());

            this.ClienteTelefoneContatoList = new ArrayList<>();
            this.ClienteTelefoneContatoList.add(selectedClienteTelefoneContato);
            this.selectedClienteEnderecoTelefone.setClienteTelefoneContatoList(ClienteTelefoneContatoList);

            this.selectedCliente.setClienteEnderecoTelefoneList(new ArrayList<ClienteEnderecoTelefone>());
            this.selectedCliente.getClienteEnderecoTelefoneList().add(selectedClienteEnderecoTelefone);

            this.selectedCliente.setClienteEnderecoList(new ArrayList<ClienteEndereco>());
            this.selectedCliente.getClienteEnderecoList().add(selectedClienteEndereco);

            this.selectedCliente.setClienteEnderecoTelefoneList(new ArrayList<ClienteEnderecoTelefone>());
            this.selectedCliente.getClienteEnderecoTelefoneList().add(selectedClienteEnderecoTelefone);

            this.selectedCliente.setClienteEmpreendimentoList(new ArrayList<Empreendimento>());

            this.ativacontato = true;
            this.ativatelefone = true;
            this.ativaAccordion = -1;
            this.ativaTab = 0;
            this.processo = "INCLUSÃO";
            this.processoEndereco = "";
            this.incluirClienteEmpreendimento = true;
            this.incluirEnderecoEmpreendimento = true;
            this.incluircliente = true;
            this.incluirendereco = true;
            this.incluirtelefone = true;
            this.incluircontato = true;

        } catch (Exception ex) {
            Logger.getLogger(ClienteBean.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

    public LazyDataModel<Cliente> getLazyModel() {
        return lazyModel;
    }

    public void setLazyModel(LazyDataModel<Cliente> lazyModel) {
        this.lazyModel = lazyModel;
    }

    public Cliente getSelectedCliente() {
        return selectedCliente;
    }

    public void setSelectedCliente(Cliente selectedCliente) {
        this.ativaTab = 0;
        this.ativaAccordion = 0;
        this.processo = "ALTERAÇÃO";
        this.cTipo = selectedCliente.getTipCliente();
        this.cCnpf = selectedCliente.getNumCpf();
        this.ClienteTelefoneContatoList = new ArrayList<>();
        this.selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
        this.selectedClienteEnderecoTelefone.setIdDdd(ddd);
        this.selectedClienteEnderecoTelefone.setIdDdi(ddi);
        this.selectedClienteTelefoneContato = new ClienteTelefoneContato();
        this.selectedClienteTelefoneContato.setIdDepartamento(new Departamento());
        this.selectedEmpreendimento = new Empreendimento();
        this.selectedEmpreendimento.setIdCliente(selectedCliente);
        this.selectedEmpreendimento.setIdCusto(new CentroCusto());
        this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
        this.selectedEmpreendimentoEndereco.setCodLogradouro(new CepEndereco());

        if (selectedCliente == null) {
            selectedCliente = new Cliente();
        }

        if (selectedCliente.getClienteEnderecoTelefoneList().isEmpty()) {

            ClienteTelefoneContatoList = new ArrayList<>();
            selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
            this.selectedClienteEnderecoTelefone.setIdDdd(ddd);
            this.selectedClienteEnderecoTelefone.setIdDdi(ddi);
            selectedClienteEnderecoTelefone.setClienteTelefoneContatoList(ClienteTelefoneContatoList);
            selectedCliente.getClienteEnderecoTelefoneList().add(selectedClienteEnderecoTelefone);
        } else {
            for (int i = 0; i < selectedCliente.getClienteEnderecoTelefoneList().size(); i++) {
                selectedClienteEnderecoTelefone = selectedCliente.getClienteEnderecoTelefoneList().get(i);
                ClienteTelefoneContatoList = selectedClienteEnderecoTelefone.getClienteTelefoneContatoList();
            }
        }

        this.selectedClienteEndereco = new ClienteEndereco();
        this.selectedClienteEndereco = selectedCliente.getClienteEnderecoList().get(0);
        this.selectedClienteEndereco.setIdCliente(selectedCliente);

        if (selectedCliente.getClienteEmpreendimentoList().isEmpty()) {
            this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
            this.selectedEmpreendimentoEndereco.setCodLogradouro(this.cepEnderecoTemp);
        } else {
            this.selectedEmpreendimentoEndereco = selectedCliente.getClienteEmpreendimentoList().get(0).getEmpreendimentoEnderecoList().get(0);
        }
        this.selectedClienteEnderecoTelefone = selectedCliente.getClienteEnderecoTelefoneList().get(0);
        if (this.selectedClienteEnderecoTelefone == null) {
            this.selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
            if (selectedClienteEnderecoTelefone.getIdDdi() == null) {
                selectedClienteEnderecoTelefone.setIdDdi(ddi);
            }
            if (selectedClienteEnderecoTelefone.getIdDdd() == null) {
                selectedClienteEnderecoTelefone.setIdDdd(ddd);
            }
        }

        if (this.selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().isEmpty()) {
            this.selectedClienteEnderecoTelefone.setClienteTelefoneContatoList(ClienteTelefoneContatoList);
        } else {
            this.selectedClienteTelefoneContato = this.selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().get(0);
        }

        if (selectedCliente.getClienteEnderecoList().isEmpty()) {
            selectedCliente.getClienteEnderecoList().add(selectedClienteEndereco);
        }

        this.selectedCliente = selectedCliente;
    }

    public void inserir(ActionEvent actionEvent) {
        msg = null;
        RequestContext context = RequestContext.getCurrentInstance();
        boolean loggedIn = false;

        try {
            if (selectedCliente.getClienteEnderecoList().size() == 1 && selectedCliente.getClienteEnderecoList().get(0).getIdCliente() == null) {
                selectedCliente.setClienteEnderecoList(new ArrayList<ClienteEndereco>());
            }
            if (selectedCliente.getClienteEnderecoTelefoneList().size() == 1 && selectedCliente.getClienteEnderecoTelefoneList().get(0).getIdCliente() == null) {
                selectedCliente.setClienteEnderecoTelefoneList(new ArrayList<ClienteEnderecoTelefone>());
            }

            if (ValidaCampos("Inserir", "C")) {
                selectedCliente.setIdCliente(null);
                selectedCliente.setIdCategoria(categoria);

                ClienteJpa.create(selectedCliente);

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Cliente Inserido com Sucesso: ".concat(selectedCliente.getNomCliente())), selectedCliente.getNomCliente());

                loggedIn = true;
            }

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Inserir Cliente: " + selectedCliente.getNomCliente(), "");
            lReturn = false;
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);

            if (loggedIn) {
                this.preparaInserir(actionEvent);
            }

            context.update("frmCliente:panel");
            context.update("frmCliente:tabCliente");
            context.update("frmCliente:messages");

            context.addCallbackParam("loggedIn", loggedIn);
        }
    }

    public void alterar(ActionEvent actionEvent) {
        msg = null;
        RequestContext context = RequestContext.getCurrentInstance();
        boolean loggedIn = false;

        try {
            if (categoria != null) {
                selectedCliente.setIdCategoria(categoria);
            }
            if (selectedCliente.getClienteEnderecoList().size() == 1 && selectedCliente.getClienteEnderecoList().get(0).getIdCliente() == null) {
                selectedCliente.setClienteEnderecoList(new ArrayList<ClienteEndereco>());
            }
            if (selectedCliente.getClienteEnderecoTelefoneList().size() == 1 && selectedCliente.getClienteEnderecoTelefoneList().get(0).getIdCliente() == null) {
                selectedCliente.setClienteEnderecoTelefoneList(new ArrayList<ClienteEnderecoTelefone>());
            }

            if (selectedCliente.getTipCliente().isEmpty()) {
                if (selectedCliente.getNumCpf().length() == 18) {
                    selectedCliente.setTipCliente("J");
                } else if (selectedCliente.getNumCpf().length() == 14) {
                    selectedCliente.setTipCliente("F");
                }

            }

            if (ValidaCampos("Alterar", "C")) {
                ClienteJpa.edit(selectedCliente);
                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Cliente Alterado com Sucesso: ".concat(selectedCliente.getNomCliente())), selectedCliente.getNomCliente());
                loggedIn = true;
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar: " + selectedCliente.getNomCliente(), "");
            lReturn = false;
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);

            if (loggedIn) {
                this.preparaInserir(actionEvent);

                context.update("frmCliente:panel");
                context.update("frmCliente:tabCliente");
            }
            context.update("frmCliente:messages");

            context.addCallbackParam("loggedIn", loggedIn);
        }
    }

    public void excluir(ActionEvent actionEvent) {
        msg = null;

        try {
            if (selectedCliente.getClienteEnderecoList().size() == 1 && selectedCliente.getClienteEnderecoList().get(0).getIdCliente() == null) {
                selectedCliente.setClienteEnderecoList(new ArrayList<ClienteEndereco>());
            }
            if (selectedCliente.getClienteEnderecoTelefoneList().size() == 1 && selectedCliente.getClienteEnderecoTelefoneList().get(0).getIdCliente() == null) {
                selectedCliente.setClienteEnderecoTelefoneList(new ArrayList<ClienteEnderecoTelefone>());
            }

            ClienteJpa.destroy(selectedCliente);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, LoginBean.AtualizaLog("", "Cliente Excluido com Sucesso: ").concat(selectedCliente.getNomCliente()), selectedCliente.getNomCliente());
            lReturn = true;
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Excluir: ".concat(selectedCliente.getNomCliente()).concat(" Cliente sendo Utilizado!"), "");
            lReturn = false;
        } finally {
            if (lReturn) {
                this.preparaInserir(actionEvent);
            }
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void inserirEndereco(ActionEvent actionEvent) {
        msg = null;
        boolean lPassa = false;
        int i = 0;
        try {
            selectedClienteEndereco.setIdCliente(selectedCliente);
            selectedClienteEndereco.setCodLogradouro(cepEndereco);
            selectedClienteEndereco.setIdEndereco(null);
            if (ValidaCampos("Inserir", "E")) {
                if (selectedCliente.getClienteEnderecoList() == null) {
                    selectedCliente.setClienteEnderecoList(new ArrayList<ClienteEndereco>());
                    selectedCliente.getClienteEnderecoList().add(selectedClienteEndereco);
                } else {
                    for (i = 0; i < selectedCliente.getClienteEnderecoList().size(); i++) {
                        if (selectedCliente.getClienteEnderecoList().get(i).getDscEndereco().isEmpty()) {
                            lPassa = true;
                            break;
                        }
                    }
                    if (lPassa) {
                        selectedCliente.getClienteEnderecoList().set(i, selectedClienteEndereco);
                    } else {
                        selectedCliente.getClienteEnderecoList().add(selectedClienteEndereco);
                    }
                }
                selectedClienteEndereco = new ClienteEndereco();
                selectedClienteEndereco.setCodLogradouro(cepEnderecoTemp);
                selectedClienteEndereco.setIdCliente(selectedCliente);
                cepEndereco = new CepEndereco();
                this.processoEndereco = "";

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Endereço Inserido com Sucesso", selectedClienteEndereco.getDscEndereco());
            }

            /*
             ClienteEnderecoJpa.create(selectedClienteEndereco);
             */
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Inserir Endereço: " + selectedClienteEndereco.getDscEndereco(), "");
        } finally {

            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterarEndereco(ActionEvent actionEvent) {
        msg = null;

        try {
            selectedClienteEndereco.setIdCliente(selectedCliente);
            if (cepEndereco != null) {
                selectedClienteEndereco.setCodLogradouro(cepEndereco);
            }
            if (ValidaCampos("Alterar", "E")) {
                selectedCliente.getClienteEnderecoList().set(rowid, selectedClienteEndereco);
                selectedClienteEndereco = new ClienteEndereco();
                cepEndereco = new CepEndereco();
                this.processoEndereco = "";

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Endereço Alterado com Sucesso", selectedClienteEndereco.getDscEndereco());
            }
            /*
             ClienteEnderecoJpa.edit(selectedClienteEndereco);
             */

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar: " + selectedCliente.getNomCliente(), "");
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluirEndereco(ActionEvent actionEvent) {
        msg = null;

        try {
            selectedCliente.getClienteEnderecoList().remove(selectedClienteEndereco);
            selectedClienteEndereco = new ClienteEndereco();

            if (selectedCliente.getClienteEnderecoList().isEmpty()) {
                selectedCliente.getClienteEnderecoList().add(selectedClienteEndereco);
            }

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Endereço Excluido com Sucesso", selectedClienteEndereco.getDscEndereco());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Excluir: " + selectedClienteEndereco.getDscEndereco(), "");
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void inserirEnderecoTelefone(ActionEvent actionEvent) {
        msg = null;
        boolean lPassa = false;
        int i = 0;

        try {
            selectedClienteEnderecoTelefone.setIdTelefone(null);
            selectedClienteEnderecoTelefone.setIdCliente(selectedCliente);
            selectedClienteEnderecoTelefone.setIdDdi(ddi);
            selectedClienteEnderecoTelefone.setIdDdd(ddd);

            if (ValidaCampos("Inserir", "T")) {
                if (selectedCliente.getClienteEnderecoTelefoneList() == null) {
                    selectedCliente.setClienteEnderecoTelefoneList(new ArrayList<ClienteEnderecoTelefone>());
                    selectedCliente.getClienteEnderecoTelefoneList().add(selectedClienteEnderecoTelefone);
                } else {
                    for (i = 0; i < selectedCliente.getClienteEnderecoTelefoneList().size(); i++) {
                        if (selectedCliente.getClienteEnderecoTelefoneList().get(i).getDscTelefone().isEmpty()) {
                            lPassa = true;
                            break;
                        }
                    }
                    if (lPassa) {
                        selectedCliente.getClienteEnderecoTelefoneList().set(i, selectedClienteEnderecoTelefone);
                    } else {
                        selectedCliente.getClienteEnderecoTelefoneList().add(selectedClienteEnderecoTelefone);
                    }
                }

                selectedClienteTelefoneContato = new ClienteTelefoneContato();
                selectedClienteTelefoneContato.setIdContato(null);
                selectedClienteTelefoneContato.setIdDepartamento(this.departamento);
                selectedClienteTelefoneContato.setIdTelefone(selectedClienteEnderecoTelefone);
                ddi = null;
                ddd = null;
                departamento = null;
                this.ativacontato = false;
                this.processoTelefone = "";
                this.ativaAccordion = 1;

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Endereço Inserido com Sucesso", selectedClienteEnderecoTelefone.getDscTelefone());
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Inserir Telefone: " + selectedClienteEnderecoTelefone.getDscTelefone(), "");
        } finally {

            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterarEnderecoTelefone(ActionEvent actionEvent) {
        msg = null;

        try {
            selectedClienteEnderecoTelefone.setIdCliente(selectedCliente);
            if (ddi != null) {
                selectedClienteEnderecoTelefone.setIdDdi(ddi);
            }
            if (ddd != null) {
                selectedClienteEnderecoTelefone.setIdDdd(ddd);
            }
            if (ValidaCampos("Alterar", "T")) {
                selectedCliente.getClienteEnderecoTelefoneList().set(rowidtelefone, selectedClienteEnderecoTelefone);

                ddi = null;
                ddd = null;
                departamento = null;
                this.ativacontato = true;
                selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
                this.selectedClienteEnderecoTelefone.setIdDdd(ddd);
                this.selectedClienteEnderecoTelefone.setIdDdi(ddi);
                selectedClienteTelefoneContato = new ClienteTelefoneContato();
                this.processoTelefone = "";

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Telefone Alterado com Sucesso", selectedClienteEnderecoTelefone.getDscTelefone());
            }

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar: " + selectedClienteEnderecoTelefone.getDscTelefone(),
                    "");
        } finally {

            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluirEnderecoTelefone(ActionEvent actionEvent) {
        msg = null;

        try {
            selectedCliente.getClienteEnderecoTelefoneList().remove(selectedClienteEnderecoTelefone);
            selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
            this.selectedClienteEnderecoTelefone.setIdDdd(ddd);
            this.selectedClienteEnderecoTelefone.setIdDdi(ddi);
            selectedClienteTelefoneContato = new ClienteTelefoneContato();
            ClienteTelefoneContatoList = new ArrayList<>();
            ClienteTelefoneContatoList.add(selectedClienteTelefoneContato);

            if (selectedCliente.getClienteEnderecoTelefoneList().isEmpty()) {
                selectedCliente.getClienteEnderecoTelefoneList().add(selectedClienteEnderecoTelefone);
            }

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Telefone Excluido com Sucesso", selectedClienteEnderecoTelefone.getDscTelefone());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Excluir: " + selectedClienteEnderecoTelefone.getDscTelefone(), "");
        } finally {
            this.ativaAccordion = -1;
            this.ativacontato = true;
            this.ativatelefone = true;
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void inserirTelefoneContato(ActionEvent actionEvent) {
        msg = null;
        boolean lPassa = false;
        int i = 0;

        try {
            selectedClienteTelefoneContato.setIdContato(null);
            selectedClienteTelefoneContato.setIdDepartamento(this.departamento);
            selectedClienteTelefoneContato.setIdTelefone(selectedClienteEnderecoTelefone);

            if (ValidaCampos("Inserir", "O")) {
                if (selectedClienteEnderecoTelefone.getClienteTelefoneContatoList() == null) {
                    selectedClienteEnderecoTelefone.setClienteTelefoneContatoList(new ArrayList<ClienteTelefoneContato>());
                    selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().add(selectedClienteTelefoneContato);
                } else {
                    for (i = 0; i < selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().size(); i++) {
                        if (selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().get(i).getNomContato().isEmpty()) {
                            lPassa = true;
                            break;
                        }
                    }
                    if (lPassa) {
                        selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().set(i, selectedClienteTelefoneContato);
                    } else {
                        selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().add(selectedClienteTelefoneContato);
                    }
                }
                this.ClienteTelefoneContatoList = selectedClienteEnderecoTelefone.getClienteTelefoneContatoList();
                this.departamento = new Departamento();
                this.selectedClienteTelefoneContato = new ClienteTelefoneContato();
                this.selectedClienteTelefoneContato.setIdDepartamento(departamento);

                this.processoContato = "";

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Contato Inserido com Sucesso", selectedClienteTelefoneContato.getNomContato());
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Inserir Contato: " + selectedClienteTelefoneContato.getNomContato(), "");
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterarTelefoneContato(ActionEvent actionEvent) {
        msg = null;

        try {
            selectedClienteTelefoneContato.setIdTelefone(selectedClienteEnderecoTelefone);
            if (departamento != null) {
                selectedClienteTelefoneContato.setIdDepartamento(departamento);
            }
            if (ValidaCampos("Inserir", "O")) {
                selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().set(rowidtelefonecontato, selectedClienteTelefoneContato);
            }

            departamento = null;
            selectedClienteTelefoneContato = new ClienteTelefoneContato();
            this.processoContato = "";

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Contato Alterado com Sucesso", selectedClienteTelefoneContato.getNomContato());

        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar: " + selectedClienteTelefoneContato.getNomContato(), "");
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluirTelefoneContato(ActionEvent actionEvent) {
        msg = null;

        try {
            selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().remove(selectedClienteTelefoneContato);
            selectedClienteTelefoneContato = new ClienteTelefoneContato();

            if (selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().isEmpty()) {
                selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().add(null);
            }

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Contato Excluido com Sucesso", selectedClienteTelefoneContato.getNomContato());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Excluir: " + selectedClienteTelefoneContato.getNomContato(), "");
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public String getMascaraCpf() {
        if (mascaraCpf == null) {
            handleCpf();
        } else if (selectedCliente.getNumCpf() != null) {
            handleCpf();
        }
        return mascaraCpf;
    }

    public void setMascaraCpf(String mascaraCpf) {
        this.mascaraCpf = mascaraCpf;
    }

    public void handleCpf() {
        if (selectedCliente.getNumCpf() == null) {
            if (selectedCliente.getTipCliente() == null) {
                this.mascaraCpf = "##.###.###/####-##";
            } else {
                if (selectedCliente.getTipCliente().equals("F")) {
                    this.mascaraCpf = "###.###.###-##";
                } else {
                    this.mascaraCpf = "##.###.###/####-##";
                }
            }
        } else {
            if (selectedCliente.getTipCliente().equals("F")) {
                this.mascaraCpf = "###.###.###-##";
            } else {
                this.mascaraCpf = "##.###.###/####-##";
            }
        }
    }

    private SelectItem[] createFilterOptions(String[][] tipClientes) {
        SelectItem[] options = new SelectItem[3];

        options[0] = new SelectItem("", "Selecione");
        for (int i = 0; i < 2; i++) {
            options[i + 1] = new SelectItem(tipClientes[0][i], tipClientes[1][i]);
        }

        return options;
    }

    private SelectItem[] createFilterOptionsStatus(String[][] tipClientes) {
        SelectItem[] options = new SelectItem[4];

        options[0] = new SelectItem("", "Selecione");
        for (int i = 0; i < 3; i++) {
            options[i + 1] = new SelectItem(tipClientes[0][i], tipClientes[1][i]);
        }

        return options;
    }

    private SelectItem[] createFilterOptionsEndereco(String[][] tipEnderecos) {
        SelectItem[] options = new SelectItem[6];

        options[0] = new SelectItem("", "Selecione");
        for (int i = 0; i < 5; i++) {
            options[i + 1] = new SelectItem(tipEnderecos[0][i], tipEnderecos[1][i]);
        }

        return options;
    }

    public String[][] getTipCliente() {
        return tipCliente;
    }

    public void setTipCliente(String[][] tipCliente) {
        this.tipCliente = tipCliente;
    }

    public SelectItem[] getTipClienteOptions() {
        return tipClienteOptions;
    }

    public void setTipClienteOptions(SelectItem[] tipClienteOptions) {
        this.tipClienteOptions = tipClienteOptions;
    }

    public LazyDataModel<ClienteEndereco> getLazyModelEndereco() {
        return lazyModelEndereco;
    }

    public void setLazyModelEndereco(LazyDataModel<ClienteEndereco> lazyModelEndereco) {
        this.lazyModelEndereco = lazyModelEndereco;
    }

    public ClienteEndereco getSelectedClienteEndereco() {
        if (selectedClienteEndereco == null) {
            selectedClienteEndereco = new ClienteEndereco();
        }

        return selectedClienteEndereco;
    }

    public void setSelectedClienteEndereco(ClienteEndereco selectedClienteEndereco) {
        this.processoEndereco = "ALTERAÇÃO";
        this.selectedClienteEndereco = selectedClienteEndereco;
    }

    public String[][] getTipEndereco() {
        return tipEndereco;
    }

    public void setTipEndereco(String[][] tipEndereco) {
        this.tipEndereco = tipEndereco;
    }

    public SelectItem[] getTipEnderecoOptions() {
        return tipEnderecoOptions;
    }

    public void setTipEnderecoOptions(SelectItem[] tipEnderecoOptions) {
        this.tipEnderecoOptions = tipEnderecoOptions;
    }

    public ClienteEndereco limparEndereco() {
        selectedClienteEndereco = new ClienteEndereco();
        return selectedClienteEndereco;
    }

    public LazyDataModel<ClienteEnderecoTelefone> getLazyModelEnderecoTelefone() {
        return lazyModelEnderecoTelefone;
    }

    public void setLazyModelEnderecoTelefone(LazyDataModel<ClienteEnderecoTelefone> lazyModelEnderecoTelefone) {
        this.lazyModelEnderecoTelefone = lazyModelEnderecoTelefone;
    }

    public ClienteEnderecoTelefone getSelectedClienteEnderecoTelefone() {
        return selectedClienteEnderecoTelefone;
    }

    public void setSelectedClienteEnderecoTelefone(ClienteEnderecoTelefone selectedClienteEnderecoTelefone) {
        try {
            this.processoTelefone = "ALTERAÇÃO";
            selectedClienteTelefoneContato = new ClienteTelefoneContato();
            selectedClienteTelefoneContato.setIdDepartamento(new Departamento());
            selectedClienteTelefoneContato.setIdTelefone(selectedClienteEnderecoTelefone);
            ClienteTelefoneContatoList = new ArrayList<>();

            if (selectedClienteEnderecoTelefone == null) {
                ClienteTelefoneContatoList.add(selectedClienteTelefoneContato);

                selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
                selectedClienteEnderecoTelefone.setClienteTelefoneContatoList(ClienteTelefoneContatoList);

                selectedClienteEnderecoTelefone.setIdDdi(ddi);
                selectedClienteEnderecoTelefone.setIdDdd(ddd);
            } else {
                if (selectedClienteEnderecoTelefone.getIdDdi() == null) {
                    selectedClienteEnderecoTelefone.setIdDdi(ddi);
                }
                if (selectedClienteEnderecoTelefone.getIdDdd() == null) {
                    selectedClienteEnderecoTelefone.setIdDdd(ddd);
                }
                if (selectedClienteEnderecoTelefone.getClienteTelefoneContatoList().isEmpty()) {
                    ClienteTelefoneContatoList.add(selectedClienteTelefoneContato);
                } else {
                    ClienteTelefoneContatoList = selectedClienteEnderecoTelefone.getClienteTelefoneContatoList();
                }
            }
            ClienteTelefoneContatoList = clienteTelefoneContatoJpa.getNativeSQL("select id_contato,email_contato,nom_contato,id_telefone,id_departamento,num_ramal,num_telefone from cliente_telefone_contato where id_telefone = ".concat(selectedClienteEnderecoTelefone.getIdTelefone().toString()));
            selectedClienteEnderecoTelefone.setClienteTelefoneContatoList(ClienteTelefoneContatoList);
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Carregar o Telefone", "");
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }

        this.selectedClienteEnderecoTelefone = selectedClienteEnderecoTelefone;
    }

    private SelectItem[] createFilterOptionsEnderecoTelefone(String[][] tipEnderecoTelefone) {
        SelectItem[] options = new SelectItem[5];

        options[0] = new SelectItem("", "Selecione");
        for (int i = 0; i < 4; i++) {
            options[i + 1] = new SelectItem(tipEnderecoTelefone[0][i], tipEnderecoTelefone[1][i]);
        }

        return options;
    }

    public String[][] getTipEnderecoTelefone() {
        return tipEnderecoTelefone;
    }

    public void setTipEnderecoTelefone(String[][] tipEnderecoTelefone) {
        this.tipEnderecoTelefone = tipEnderecoTelefone;
    }

    public SelectItem[] getTipEnderecoTelefoneOptions() {
        return tipEnderecoTelefoneOptions;
    }

    public void setTipEnderecoTelefoneOptions(SelectItem[] tipEnderecoTelefoneOptions) {
        this.tipEnderecoTelefoneOptions = tipEnderecoTelefoneOptions;
    }

    public ClienteEnderecoTelefone limparEnderecoTelefone() {
        selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
        this.selectedClienteEnderecoTelefone.setIdDdd(ddd);
        this.selectedClienteEnderecoTelefone.setIdDdi(ddi);
        return selectedClienteEnderecoTelefone;
    }

    public ClienteEnderecoTelefone abreEnderecoTelefone() {
        if (selectedClienteEndereco.getIdEndereco() == null) {
            selectedClienteEndereco.setIdEndereco(0);
        }
        return selectedClienteEnderecoTelefone;
    }

    public boolean verificaCampo(FacesContext context, UIComponent input, Object value) throws ValidatorException {
        try {
            String cCampo = (String) value;
            if (cCampo.isEmpty()) {
                throw new ValidatorException(new FacesMessage("Campo Obrigatório"));
            }
        } catch (Exception e) {
            throw new ValidatorException(new FacesMessage("Campo Obrigatório"));
        }

        return true;
    }

    public boolean ValidaCampos(String cOperacao, String cModulo) {
        lReturn = true;
        msg = null;
        String[] aCaractere = {".", "/", "-"};
        String[] aTipCliente = {"J", "F"};
        String[] aTipEndereco = {"1", "2", "3"};
        String[] aTipTelefone = {"1", "2", "3", "4"};

        String cCpf;
        try {
            switch (cModulo) {
                case "C":
                    if (!funcoes.PesqCaracteres(selectedCliente.getTipCliente(), aTipCliente)) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "Tipo do Cliente não selecionado!");
                        lReturn = false;
                    } else if (selectedCliente.getNomCliente().isEmpty()) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "Razão Social // Nome do Cliente em branco!");
                        lReturn = false;
                    } else if (selectedCliente.getClienteEnderecoList().isEmpty()) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "Obrigatório Cadastrar Endereço!");
                        lReturn = false;
                    } else if (selectedCliente.getClienteEmpreendimentoList().size() > 0) {
                        if (selectedCliente.getClienteEmpreendimentoList() == null) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "Obrigatório Cadastrar Endereço do Empreendimento!");
                            lReturn = false;
                        } else {
                            for (int i = 0; i < selectedCliente.getClienteEmpreendimentoList().size(); i++) {
                                if (selectedCliente.getClienteEmpreendimentoList().get(i).getEmpreendimentoEnderecoList() == null) {
                                    msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "Obrigatório Cadastrar Endereço do Empreendimento!");
                                    lReturn = false;
                                    break;
                                } else {
                                    if (selectedCliente.getClienteEmpreendimentoList().get(i).getEmpreendimentoEnderecoList().isEmpty()) {
                                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "Obrigatório Cadastrar Endereço do Empreendimento!");
                                        lReturn = false;
                                        break;
                                    }
                                }
                            }
                        }
                    }
                    if (lReturn) {
                        cCpf = funcoes.TiraCaractere(selectedCliente.getNumCpf(), aCaractere);
                        lReturn = funcoes.valida_CpfCnpj(cCpf);
                        if (lReturn) {
                            selectedCliente.setNumCpf(cCpf);
                        } else {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "C.N.P.J. ou C.P.F. do Cliente Inválido!");
                            lReturn = false;
                        }
                    }
                    if (lReturn) {
                        if (!Funcoes.isValidDate(selectedCliente.getDatNascAbert(), true, false)) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "Data Abertura // Nascimento Inválida!");
                            lReturn = false;
                        }
                    }
                    if (lReturn) {
                        if (selectedCliente.getIdCategoria() == null || selectedCliente.getIdCategoria().getDscCategoria().isEmpty()) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "Categoria Obrigatória!");
                            lReturn = false;
                        }
                    }
                    break;
                case "P":
                    if (!funcoes.PesqCaracteres(selectedEmpreendimento.getTipEmpreendimento(), aTipCliente)) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedEmpreendimento.getDscEmpreendimento(), "Tipo do Empreendimento não selecionado!");
                        lReturn = false;
                    } else if (selectedEmpreendimento.getDscEmpreendimento().isEmpty()) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedEmpreendimento.getDscEmpreendimento(), "Descrição em branco!");
                        lReturn = false;
                    } else if (this.selectedEmpreendimento.getEmpreendimentoEnderecoList() == null || this.selectedEmpreendimento.getEmpreendimentoEnderecoList().isEmpty()) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedEmpreendimento.getDscEmpreendimento(), "ATENÇÃO ... Obrigatório Inserir Endereço do Empreendimento!");
                        lReturn = false;
                    }
                    if (lReturn) {
                        cCpf = funcoes.TiraCaractere(selectedEmpreendimento.getNumCpfEmpreendimento(), aCaractere);
                        if (!cCpf.isEmpty()) {
                            lReturn = funcoes.valida_CpfCnpj(cCpf);
                            if (lReturn) {
                                selectedCliente.setNumCpf(cCpf);
                            } else {
                                msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedEmpreendimento.getDscEmpreendimento(), "C.N.P.J. ou C.P.F. Inválido!");
                                lReturn = false;
                            }
                        }
                    }
                    break;
                case "E":
                    if (!funcoes.PesqCaracteres(selectedClienteEndereco.getTipEndereco(), aTipEndereco)) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedClienteEndereco.getDscEndereco(), "Tipo do Endereço não selecionado!");
                        lReturn = false;
                    }
                    if (lReturn) {
                        if (selectedClienteEndereco.getDscEndereco().isEmpty()) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "Descrição do Endereço em branco!");
                            lReturn = false;
                        }
                    }
                    if (lReturn) {
                        if (selectedClienteEndereco.getCodLogradouro() == null) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedClienteEndereco.getDscEndereco(), "C.E.P. inválido!");
                            lReturn = false;
                        } else if (selectedClienteEndereco.getCodLogradouro().getNumCep().isEmpty()) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedClienteEndereco.getDscEndereco(), "C.E.P. inválido!");
                            lReturn = false;
                        }
                    }
                    if (lReturn) {
                        if (selectedClienteEndereco.getNumEndereco().isEmpty()) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedClienteEndereco.getDscEndereco(), "Numero em branco!");
                            lReturn = false;
                        }
                    }
                    break;
                case "T":
                    if (!funcoes.PesqCaracteres(selectedClienteEnderecoTelefone.getTipTelefone(), aTipTelefone)) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": "
                                + selectedClienteEnderecoTelefone.getDscTelefone(), "Tipo do Telefone não selecionado!");
                        lReturn = false;
                    }
                    if (lReturn) {
                        if (selectedClienteEnderecoTelefone.getDscTelefone().isEmpty()) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": "
                                    + selectedClienteEnderecoTelefone.getDscTelefone(), "Descrição do Telefone em branco!");
                            lReturn = false;
                        }
                    }
                    if (lReturn) {
                        if (selectedClienteEnderecoTelefone.getIdDdi() == null) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": "
                                    + selectedClienteEnderecoTelefone.getDscTelefone(), "D.D.I. Incorreto!");
                            lReturn = false;
                        }

                    }
                    if (lReturn) {
                        if (selectedClienteEnderecoTelefone.getIdDdd() == null) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": "
                                    + selectedClienteEnderecoTelefone.getDscTelefone(), "D.D.D. Incorreto!");
                            lReturn = false;
                        }

                    }
                    if (lReturn) {
                        if (selectedClienteEnderecoTelefone.getNumTelefone().isEmpty()) {
                            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": "
                                    + selectedClienteEnderecoTelefone.getDscTelefone(), "Numero do Telefone em branco!");
                            lReturn = false;
                        }
                    }
                    break;
                case "O":
                    if (selectedClienteTelefoneContato.getNomContato().isEmpty()) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": "
                                + selectedClienteTelefoneContato.getNomContato(), "Nome do Contato em branco!");
                        lReturn = false;
                    } else if (!funcoes.validaEmail(selectedClienteTelefoneContato.getEmailContato())) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": "
                                + selectedClienteTelefoneContato.getNomContato(), "E-Mail Incorreto ou em branco!");
                        lReturn = false;
                    } else if (departamento == null || departamento.getIdDepartamento() == null) {
                        msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": "
                                + selectedClienteTelefoneContato.getNomContato(), "Departamento em branco!");
                        lReturn = false;
                    }
                    break;
            }
        } catch (Exception ex) {
            lReturn = false;
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao " + cOperacao + ": " + selectedCliente.getNomCliente(), "");
        }
        return lReturn;
    }

    public void preparaInserir(ActionEvent actionEvent) {
        this.selectedCliente = new Cliente();
        this.selectedClienteEndereco = new ClienteEndereco();
        this.selectedClienteEndereco.setCodLogradouro(cepEnderecoTemp);
        this.selectedEmpreendimento = new Empreendimento();
        this.selectedEmpreendimento.setIdCliente(selectedCliente);
        this.selectedEmpreendimento.setIdCusto(new CentroCusto());
        this.selectedClienteTelefoneContato = new ClienteTelefoneContato();
        this.selectedClienteTelefoneContato.setIdDepartamento(new Departamento());
        this.selectedClienteTelefoneContato.setIdTelefone(new ClienteEnderecoTelefone());
        this.selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
        this.selectedClienteEnderecoTelefone.setIdCliente(selectedCliente);
        this.selectedClienteEnderecoTelefone.setIdDdd(new CodigoDdd());
        this.selectedClienteEnderecoTelefone.setIdDdi(new CodigoDdi());
        this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
        this.selectedEmpreendimentoEndereco.setCodLogradouro(cepEnderecoTemp);

        this.selectedCliente.setIdCategoria(new Categoria());

        this.ClienteTelefoneContatoList = new ArrayList<>();
        this.ClienteTelefoneContatoList.add(selectedClienteTelefoneContato);
        this.selectedClienteEnderecoTelefone.setClienteTelefoneContatoList(ClienteTelefoneContatoList);

        this.selectedCliente.setClienteEnderecoTelefoneList(new ArrayList<ClienteEnderecoTelefone>());
        this.selectedCliente.getClienteEnderecoTelefoneList().add(selectedClienteEnderecoTelefone);

        this.selectedCliente.setClienteEnderecoList(new ArrayList<ClienteEndereco>());
        this.selectedCliente.getClienteEnderecoList().add(selectedClienteEndereco);

        this.selectedCliente.setClienteEnderecoTelefoneList(new ArrayList<ClienteEnderecoTelefone>());
        this.selectedCliente.getClienteEnderecoTelefoneList().add(selectedClienteEnderecoTelefone);

        this.selectedCliente.setClienteEmpreendimentoList(new ArrayList<Empreendimento>());

        this.departamento = new Departamento();

        this.ativacontato = true;
        this.ativatelefone = true;
        this.ativaAccordion = -1;
        this.ativaTab = 0;
        this.processo = "INCLUSÃO";
        this.processoEndereco = "";
        this.incluirClienteEmpreendimento = true;
        this.incluirEnderecoEmpreendimento = true;
        this.incluircliente = true;
        this.incluirendereco = true;
        this.incluirtelefone = true;
        this.incluircontato = true;
    }

    public void preparaInserirEndereco(ActionEvent actionEvent) {
        this.nendereco = 0;
        this.processoEndereco = "INCLUSÃO";
        this.incluirendereco = true;
        this.selectedClienteEndereco = new ClienteEndereco();
        this.selectedClienteEndereco.setTipEndereco("1");
        this.selectedClienteEndereco.setCodLogradouro(cepEnderecoTemp);
    }

    public void preparaInserirEnderecoTelefone(ActionEvent actionEvent) throws EaoException {
        this.ativacontato = true;
        this.ativatelefone = false;
        this.incluirtelefone = true;
        this.incluircontato = true;
        this.ativaAccordion = 0;
        this.processoTelefone = "INCLUSÃO";

        ddi = codigoDdiJpa.getPorId(31);
        ddd = codigoDddJpa.getPorId(11958);

        this.selectedClienteEnderecoTelefone = new ClienteEnderecoTelefone();
        this.selectedClienteEnderecoTelefone.setIdDdi(ddi);
        this.selectedClienteEnderecoTelefone.setIdDdd(ddd);

        this.selectedClienteTelefoneContato = new ClienteTelefoneContato();
        this.selectedClienteTelefoneContato.setIdDepartamento(new Departamento());
        this.selectedClienteTelefoneContato.setIdTelefone(selectedClienteEnderecoTelefone);
        this.ClienteTelefoneContatoList = new ArrayList<>();
        this.ClienteTelefoneContatoList.add(selectedClienteTelefoneContato);
    }

    public void preparaInserirClienteEmpreendimento(ActionEvent actionEvent) {
        this.incluirClienteEmpreendimento = true;
        this.incluirEnderecoEmpreendimento = true;

        this.selectedCentroCusto = new CentroCusto();
        this.selectedEmpreendimento.setIdCusto(selectedCentroCusto);
        this.selectedEmpreendimento = new Empreendimento();
        this.selectedEmpreendimento.setIdCusto(selectedCentroCusto);
        this.selectedEmpreendimento.setIdCliente(selectedCliente);

        this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
        this.selectedEmpreendimentoEndereco.setIdEmpreendimento(selectedEmpreendimento);
        this.selectedEmpreendimentoEndereco.setCodLogradouro(cepEnderecoTemp);
    }

    public void preparaInserirTelefoneContato(ActionEvent actionEvent) {
        this.incluircontato = true;
        this.selectedClienteTelefoneContato = new ClienteTelefoneContato();
        this.selectedClienteTelefoneContato.setIdTelefone(selectedClienteEnderecoTelefone);
        this.selectedClienteTelefoneContato.setIdDepartamento(new Departamento());
        this.processoContato = "INCLUSÃO";
    }

    public Categoria getCategoria() {
        return categoria;
    }

    public void setCategoria(Categoria categoria) {
        selectedCliente.setIdCategoria(categoria);
        this.categoria = categoria;
    }

    public boolean isIncluircliente() {
        return incluircliente;
    }

    public void setIncluircliente(boolean incluircliente) {
        this.incluircliente = incluircliente;
    }

    public boolean isIncluirendereco() {
        return incluirendereco;
    }

    public void setIncluirendereco(boolean incluirendereco) {
        this.incluirendereco = incluirendereco;
    }

    public Integer getRowid() {
        return rowid;
    }

    public void setRowid(Integer rowid) {
        this.rowid = rowid;
    }

    public CepEndereco getCepEndereco() {
        return cepEndereco;
    }

    public void setCepEndereco(CepEndereco cepEndereco) {
        RequestContext context = RequestContext.getCurrentInstance();

        if (this.nendereco == 0) {
            this.selectedClienteEndereco.setCodLogradouro(cepEndereco);
        } else {
            this.selectedEmpreendimentoEndereco.setCodLogradouro(cepEndereco);
        }
        context.update("frmCliente:accordion");
        this.cepEndereco = cepEndereco;
    }

    public CodigoDdi getDdi() {
        return ddi;
    }

    public void setDdi(CodigoDdi ddi) {
        selectedClienteEnderecoTelefone.setIdDdi(ddi);
        this.ddi = ddi;
    }

    public CodigoDdd getDdd() {
        return ddd;
    }

    public void setDdd(CodigoDdd ddd) {
        selectedClienteEnderecoTelefone.setIdDdd(ddd);
        this.ddd = ddd;
    }

    public Departamento getDepartamento() {
        return departamento;
    }

    public void setDepartamento(Departamento departamento) {
        selectedClienteTelefoneContato.setIdDepartamento(departamento);
        this.departamento = departamento;
    }

    public Integer getRowidtelefone() {
        return rowidtelefone;
    }

    public void setRowidtelefone(Integer rowidtelefone) {
        this.rowidtelefone = rowidtelefone;
    }

    public Integer getRowidtelefonecontato() {
        return rowidtelefonecontato;
    }

    public void setRowidtelefonecontato(Integer rowidtelefonecontato) {
        this.rowidtelefonecontato = rowidtelefonecontato;
    }

    public ClienteTelefoneContato getSelectedClienteTelefoneContato() {
        return selectedClienteTelefoneContato;
    }

    public void setSelectedClienteTelefoneContato(ClienteTelefoneContato selectedClienteTelefoneContato) {
        this.processoContato = "ALTERAÇÃO";
        this.selectedClienteTelefoneContato = selectedClienteTelefoneContato;
    }

    public List<ClienteTelefoneContato> getClienteTelefoneContatoList() {
        return ClienteTelefoneContatoList;
    }

    public void setClienteTelefoneContatoList(List<ClienteTelefoneContato> ClienteTelefoneContatoList) {
        this.ClienteTelefoneContatoList = ClienteTelefoneContatoList;
    }

    public boolean isAtivacontato() {
        return ativacontato;
    }

    public void setAtivacontato(boolean ativacontato) {
        this.ativacontato = ativacontato;
    }

    public Integer getAtivaTab() {
        return ativaTab;
    }

    public void setAtivaTab(Integer ativaTab) {
        RequestContext context = RequestContext.getCurrentInstance();

        if (ativaTab == 0) {
            context.update("frmCliente:accordion:tabPrincipal");
        }
        this.ativaTab = ativaTab;
    }

    public Integer getAtivaAccordion() {
        return ativaAccordion;
    }

    public void setAtivaAccordion(Integer ativaAccordion) {
        this.ativaAccordion = ativaAccordion;
    }

    public String getProcesso() {
        return processo;
    }

    public void setProcesso(String processo) {
        this.processo = processo;
    }

    public String getProcessoEndereco() {
        return processoEndereco;
    }

    public void setProcessoEndereco(String processoEndereco) {
        this.processoEndereco = processoEndereco;
    }

    public String getProcessoTelefone() {
        return processoTelefone;
    }

    public void setProcessoTelefone(String processoTelefone) {
        this.processoTelefone = processoTelefone;
    }

    public String getProcessoContato() {
        return processoContato;
    }

    public void setProcessoContato(String processoContato) {
        this.processoContato = processoContato;
    }

    public boolean isAtivatelefone() {
        return ativatelefone;
    }

    public void setAtivatelefone(boolean ativatelefone) {
        this.ativatelefone = ativatelefone;
    }

    public Empreendimento getSelectedEmpreendimento() {
        return selectedEmpreendimento;
    }

    public void setSelectedEmpreendimento(Empreendimento selectedEmpreendimento) {
        this.selectedEmpreendimento = selectedEmpreendimento;
    }

    public int getRowidclienteempreendimento() {
        return rowidclienteempreendimento;
    }

    public void setRowidclienteempreendimento(int rowidclienteempreendimento) {
        this.rowidclienteempreendimento = rowidclienteempreendimento;
    }

    public boolean isIncluirClienteEmpreendimento() {
        return incluirClienteEmpreendimento;
    }

    public void setIncluirClienteEmpreendimento(boolean incluirClienteEmpreendimento) {
        this.incluirClienteEmpreendimento = incluirClienteEmpreendimento;
    }

    public void inserirClienteEmpreendimento(ActionEvent actionEvent) {
        msg = null;

        try {
            if (ValidaCampos("Inserir", "P")) {
                if (this.cTipo != null) {
                    this.selectedCliente.setTipCliente(this.cTipo);
                    this.selectedCliente.setNumCpf(this.cCnpf);
                }

                this.selectedCentroCusto = new CentroCusto();
                this.selectedCentroCusto.setDscCusto("Controle: ".concat(selectedEmpreendimento.getDscEmpreendimento().toUpperCase()));
                this.selectedCentroCusto.setTipStatus(true);

                selectedEmpreendimento.setIdCusto(this.selectedCentroCusto);

                this.selectedEmpreendimento.setIdCliente(selectedCliente);
                this.selectedCliente.getClienteEmpreendimentoList().add(selectedEmpreendimento);

                this.selectedCentroCusto = new CentroCusto();
                this.selectedEmpreendimento = new Empreendimento();
                this.selectedEmpreendimento.setIdCusto(this.selectedCentroCusto);
                this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
                this.selectedEmpreendimentoEndereco.setIdEmpreendimento(this.selectedEmpreendimento);
                this.selectedEmpreendimentoEndereco.setCodLogradouro(cepEnderecoTemp);

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Empreendimento Inserido com Sucesso", selectedEmpreendimento.getDscEmpreendimento());
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Inserir Empreendimento: " + selectedEmpreendimento.getDscEmpreendimento(), "");
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterarClienteEmpreendimento(ActionEvent actionEvent) {
        msg = null;

        try {
            if (ValidaCampos("Alterar", "P")) {
                if (this.cTipo != null) {
                    this.selectedCliente.setTipCliente(this.cTipo);
                    this.selectedCliente.setNumCpf(this.cCnpf);
                }
                selectedCentroCusto = selectedEmpreendimento.getIdCusto();
                selectedCentroCusto.setDscCusto("Controle: ".concat(selectedEmpreendimento.getDscEmpreendimento().toUpperCase()));
                selectedCentroCusto.setTipStatus(true);
                selectedEmpreendimento.setIdCusto(selectedCentroCusto);

                this.selectedEmpreendimento.setIdCliente(selectedCliente);
                this.selectedCliente.getClienteEmpreendimentoList().set(rowidclienteempreendimento, selectedEmpreendimento);
                this.selectedEmpreendimento = new Empreendimento();
                this.selectedEmpreendimento.setIdCusto(new CentroCusto());
                this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
                this.selectedEmpreendimentoEndereco.setCodLogradouro(cepEnderecoTemp);
                this.selectedEmpreendimentoEndereco.setIdEmpreendimento(selectedEmpreendimento);

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Empreendimento Alterado com Sucesso", selectedEmpreendimento.getDscEmpreendimento());
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar Empreendimento: " + selectedEmpreendimento.getDscEmpreendimento(), "");
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void excluirClienteEmpreendimento(ActionEvent actionEvent) {
        msg = null;

        try {
            String cFiltro = "select * from empreendimento_lote where id_empreendimento = ".concat(this.selectedEmpreendimento.getIdEmpreendimento().toString());
            List<EmpreendimentoLote> selectedEmpreendimentoLoteList = empreendimentoLoteJpa.getNativeSQL(cFiltro);
            this.selectedEmpreendimento.setEmpreendimentoLoteList(selectedEmpreendimentoLoteList);

            this.selectedCliente.getClienteEmpreendimentoList().remove(this.selectedEmpreendimento);
            this.selectedEmpreendimento = new Empreendimento();
            this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
            this.selectedEmpreendimentoEndereco.setIdEmpreendimento(selectedEmpreendimento);
            this.incluirClienteEmpreendimento = true;

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Empreendimento Excluido com Sucesso", selectedEmpreendimento.getDscEmpreendimento());
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Excluir Empreendimento: " + selectedEmpreendimento.getDscEmpreendimento(), "");
        } finally {
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public EmpreendimentoEndereco getSelectedEmpreendimentoEndereco() {
        return selectedEmpreendimentoEndereco;
    }

    public void setSelectedEmpreendimentoEndereco(EmpreendimentoEndereco selectedEmpreendimentoEndereco) {
        this.selectedEmpreendimentoEndereco = selectedEmpreendimentoEndereco;
    }

    public Integer getRowidEndereco() {
        return rowidEndereco;
    }

    public void setRowidEndereco(Integer rowidEndereco) {
        this.rowidEndereco = rowidEndereco;
    }

    public void preparaInserirEnderecoEmpreendimento(ActionEvent actionEvent) {
        this.incluirEnderecoEmpreendimento = true;
        this.nendereco = 1;
        this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
        this.selectedEmpreendimentoEndereco.setIdEmpreendimento(selectedEmpreendimento);
        this.selectedEmpreendimentoEndereco.setCodLogradouro(cepEnderecoTemp);
    }

    public void inserirEnderecoEmpreendimento(ActionEvent actionEvent) {
        int i = 0;
        msg = null;

        try {
            if (valida_endereco()) {
                this.selectedEmpreendimentoEndereco.setIdEmpreendimento(selectedEmpreendimento);
                if (selectedEmpreendimento.getEmpreendimentoEnderecoList() == null) {
                    selectedEmpreendimento.setEmpreendimentoEnderecoList(new ArrayList<EmpreendimentoEndereco>());
                }

                selectedEmpreendimento.getEmpreendimentoEnderecoList().add(selectedEmpreendimentoEndereco);

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Endereço do Empreendimento Inserido com Sucesso!", selectedEmpreendimentoEndereco.getCodLogradouro().getDscLogradouro());
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Inserir o Endereço do Empreendimento: ", selectedEmpreendimentoEndereco.getCodLogradouro().getDscLogradouro());
            lReturn = false;
        } finally {
            if (lReturn) {
                this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
                this.selectedEmpreendimentoEndereco.setIdEmpreendimento(selectedEmpreendimento);
                this.selectedEmpreendimentoEndereco.setCodLogradouro(cepEnderecoTemp);
            }
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public void alterarEnderecoEmpreendimento(ActionEvent actionEvent) {
        try {
            if (valida_endereco()) {
                List empreendimentoEnderecoList = new ArrayList<>();
                empreendimentoEnderecoList = selectedEmpreendimento.getEmpreendimentoEnderecoList();
                empreendimentoEnderecoList.set(rowidEndereco, selectedEmpreendimentoEndereco);
                selectedEmpreendimento.setEmpreendimentoEnderecoList(empreendimentoEnderecoList);

                msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Endereço Alterado com Sucesso!", selectedEmpreendimentoEndereco.getCodLogradouro().getDscLogradouro());
            }
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Alterar o Endereço: ", selectedEmpreendimentoEndereco.getCodLogradouro().getDscLogradouro());
            lReturn = false;
        } finally {
            if (lReturn) {
                this.selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
                this.selectedEmpreendimentoEndereco.setIdEmpreendimento(selectedEmpreendimento);
            }
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public boolean valida_endereco() {
        lReturn = true;

        if (this.selectedEmpreendimentoEndereco.getCodLogradouro() == null) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ATENÇÃO ... OBRIGATÓRIO DEFINIR O C.E.P. DO ENDEREÇO!", null);
            lReturn = false;
        } else if (this.selectedEmpreendimentoEndereco.getNumEndereco().isEmpty()) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "ATENÇÃO ... OBRIGATÓRIO DEFINIR O NUMERO DO ENDEREÇO!", null);
            lReturn = false;
        }

        return lReturn;
    }

    public int getNendereco() {
        return nendereco;
    }

    public void setNendereco(int nendereco) {
        this.nendereco = nendereco;
    }

    public void excluirEnderecoEmpreendimento(ActionEvent actionEvent) {
        try {
            selectedEmpreendimento.getEmpreendimentoEnderecoList().remove(selectedEmpreendimentoEndereco);

            msg = new FacesMessage(FacesMessage.SEVERITY_INFO, "Endereço Excluido com Sucesso!", selectedEmpreendimentoEndereco.getCodLogradouro().getDscLogradouro());
            lReturn = true;
        } catch (Exception e) {
            msg = new FacesMessage(FacesMessage.SEVERITY_ERROR, "Erro ao Excluir o Endereço: ", selectedEmpreendimentoEndereco.getCodLogradouro().getDscLogradouro());
            lReturn = false;
        } finally {
            if (lReturn) {
                selectedEmpreendimentoEndereco = new EmpreendimentoEndereco();
            }
            FacesContext.getCurrentInstance().addMessage(null, msg);
        }
    }

    public SelectItem[] getStaClienteOptions() {
        return staClienteOptions;
    }

    public void setStaClienteOptions(SelectItem[] staClienteOptions) {
        this.staClienteOptions = staClienteOptions;
    }

    public SelectItem[] getStaEmpreendimentoOptions() {
        return staEmpreendimentoOptions;
    }

    public void setStaEmpreendimentoOptions(SelectItem[] staEmpreendimentoOptions) {
        this.staEmpreendimentoOptions = staEmpreendimentoOptions;
    }

    public Cliente[] getSelectedClientes() {
        return selectedClientes;
    }

    public void setSelectedClientes(Cliente[] selectedClientes) {
        this.selectedClientes = selectedClientes;
    }

    public boolean isIncluirtelefone() {
        return incluirtelefone;
    }

    public void setIncluirtelefone(boolean incluirtelefone) {
        this.incluirtelefone = incluirtelefone;
    }

    public boolean isIncluircontato() {
        return incluircontato;
    }

    public void setIncluircontato(boolean incluircontato) {
        this.incluircontato = incluircontato;
    }

    public boolean isIncluirEnderecoEmpreendimento() {
        return incluirEnderecoEmpreendimento;
    }

    public void setIncluirEnderecoEmpreendimento(boolean incluirEnderecoEmpreendimento) {
        this.incluirEnderecoEmpreendimento = incluirEnderecoEmpreendimento;
    }
}
